package cn.com.dcsgo.service;

import cn.com.dcsgo.domain.ProdProp;
import cn.com.dcsgo.domain.ProdPropValue;
import cn.com.dcsgo.dto.PageDTO;
import cn.com.dcsgo.dto.ProdPropAddDTO;
import cn.com.dcsgo.dto.ProdPropQueryDTO;
import cn.com.dcsgo.dto.ProdPropUpdateDTO;
import cn.com.dcsgo.vo.ProdPropVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 针对表【prod_prop(规格表)】的数据库操作Service
 *
 * @author Dcsgo
 * @since 2025-10-14 08:45:30
 */
public interface ProdPropService extends IService<ProdProp> {

    /**
     * 分页查询商品规格信息，超级店铺能看到所有商品规格，其他店铺只能看到自己店铺下的商品规格
     *
     * @param pageDTO          分页参数
     * @param prodPropQueryDTO 查询参数
     * @return 商品规格及其取值信息
     */
    Page<ProdPropVO> getPage(PageDTO pageDTO, ProdPropQueryDTO prodPropQueryDTO);

    /**
     * 添加规格及规格值
     *
     * @param prodPropAddDTO 规格信息
     * @return true-添加成功，false-添加失败
     */
    boolean save(ProdPropAddDTO prodPropAddDTO);

    /**
     * 修改规格及其规格值，规格值列表不为null则使用新的规格值对旧值进行覆盖
     *
     * @param prodPropUpdateDTO 规格信息
     * @return true-更新成功，false-更新失败
     */
    boolean update(ProdPropUpdateDTO prodPropUpdateDTO);

    /**
     * 删除规格，一并删除关联的规格值
     *
     * @param propId 规格ID
     * @return true-删除成功，false-删除失败
     */
    boolean removePropAndValuesById(Long propId);

    /**
     * 获取所有规格信息，只包含当前用户店铺下的规格信息，超级店铺能看到所有规格
     *
     * @param shopId 店铺ID
     * @return 当前用户店铺下的规格信息，超级店铺能看到所有规格
     */
    List<ProdProp> getAllProdPropByShopId(Long shopId);

    /**
     * 根据规格ID查询规格值列表
     *
     * @param propId 规格ID
     * @return 规格ID关联的规格值列表
     */
    List<ProdPropValue> getPropValues(Long propId);
}
